LFIND - LSEARCH

            
#include <search.h>    требуется только для объявления функции
char *lsearch(key,base,num,width,compare);
char *lfind(key,base,num,width,compare);
char *key;              ключ поиска
char *base;             указатель  на  поисковую  базу данных
unsigned *num,width;    число и размер элементов
int (*compare)();       указатель на функцию сравнения

Описание.
Функции lsearch и lfind производят строковый поиск для значения key в массиве из num элементов, каждый размером width байт. (В отличии от bsearch, lsearch и lfind не требуют отсортированного массива). Аргумент base является указателем на базу массива, который нужно найти.
Если key не найден, lsearch присоединяет его в конец. Функция lfind этого не делает.
Аргумент compare является указателем на процедуру, поставляемую пользователем, которая сравнивает два элемента массива и возвращает значение, определяющее их отношение. Обе функции вызывают процедуру compare в течении поиска один или несколько раз, пересылая в каждом вызове указатели на два элемента массива. Эта процедура должна сравнивать элементы, а затем возвращать одно из следующих значений:

            Значение                     Его смысл
            
            не равно 0           element 1 и element 2 различны
            
               0                 element 1 равен element 2
            

Возвращаемое значение.
Обе функции lsearch и lfind возвращают указатель на первое возникновение key в массиве, на который указывает base.
Если key не найден, эти функции возвращают NULL.

Пример:

               /* функция lsearch производит строковый поиск в массиве для
         элемента "key"; lsearch возвращает указатель на структуру, если в
         ней содержится key, и NULL - если его нет. */
            
               #include <search.h>
               #include <string.h>
               #include <stdio.h>
               int compare();
               /* должна быть объявлена как функция */
               main (argc, argv)
               int argc;
               char **argv;
                {
               char **result;
               char *key = "PATH";
               /*  следующий  оператор  находит  аргумент,  начинающийся с
         "PATH", в предположении, что аргументы лексикографически отсорти-
         рованы */
               result = (char **)bsearch((char *)&key,
                        (char *)argv, argc, sizeof(char *),
                         compare);
               if (result)
                   printf ("%s found\n", *result);
               else
                   printf("PATH not found!\n");
                 }
               int compare (arg1, arg2)
               char **arg1, **arg2;
                {
                 return(strncmp(*arg1, *arg2, strlen(*arg1)));
                }
            

Hosted by uCoz